package com.fh.modules.ems.service;

import com.fh.common.web.AbstractService;
import com.fh.modules.ems.entity.EmsCoupon;
import com.fh.modules.ems.model.CouponModel;
import com.fh.modules.oms.entity.OmsOrderWechat;
import com.fh.modules.pms.entity.PmsProduct;
import com.fhMall.request.AddMemberCouponRequest;
import com.fhMall.request.QueryMemberCouponRequest;
import com.fhMall.request.SaveMemberCouponRequest;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * @Description: 优惠券
 * @author： code generator
 * @date：   2019-09-26
 * @version： V1.0
 */
public interface IEmsCouponService extends AbstractService<EmsCoupon> {

    /**
     *  验证订单商品是否可用该优惠券
     * @param pmsProduct 商品
     * @param totalPrice 订单总价
     * @param productCounts 商品数量
     * @param couponId
     * @return
     */
    public boolean validateCouponUseable(PmsProduct pmsProduct, Integer productCounts, BigDecimal totalPrice, Serializable couponId);

    /**
     *  验证订单商品是否可用该优惠券
     * @param pmsProduct 商品
     * @param totalPrice 订单总价
     * @param productCounts 商品数量
     * @param emsCoupon
     * @return
     */
    public boolean validateCouponUseable(PmsProduct pmsProduct, Integer productCounts, BigDecimal totalPrice, EmsCoupon emsCoupon);
    /**
     * 下单使用优惠券
     * @param omsOrderWechat
     */
    public void useCoupon(OmsOrderWechat omsOrderWechat);

    /**
     * 返还优惠券
     */
    public void returnCoupon(Serializable id);

    /**
     *  用户根据优惠券模板领取优惠券
     */
    public void memberGetCoupon(SaveMemberCouponRequest saveMemberCouponRequest);

    /**
     * 用户领取优惠券次数
     */
    public int userHaveGetCouponTimes(Integer memberId, Integer couponTemplateId);
    /**
     *  分页查看用户拥有的优惠券
     */
    public List<CouponModel> queryMemberCoupon(QueryMemberCouponRequest queryMemberCouponRequest);

    /**
     * 查询可用优惠券数量
     * @param memberId  用户id
     */
    public Integer queryAvailableCouponCount(Integer memberId);

    /**
     *  用户注册赠送，默认优惠券
     */
    void addMemberCoupon(AddMemberCouponRequest addMemberCouponRequest);
}
